﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace PSTools
{
	public class AutoClosingMessageBox
	{
		const int WM_CLOSE = 0x0010;

		[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
		static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
		[System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
		static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); 
		
		System.Threading.Timer _timeoutTimer;
		string _caption;

		AutoClosingMessageBox(string text, string caption, int timeout)
		{
			_caption = caption;
			_timeoutTimer = new System.Threading.Timer(OnTimerElapsed, null, timeout, System.Threading.Timeout.Infinite);
			MessageBox.Show(text, caption);
		}

		public static void Show(string text, string caption, int timeout)
		{
			new AutoClosingMessageBox(text, caption, timeout);
		}

		void OnTimerElapsed(object state)
		{
			IntPtr mbWnd = FindWindow(null, _caption);
			if (mbWnd != IntPtr.Zero)
				SendMessage(mbWnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
			_timeoutTimer.Dispose();
		}
		
	}
}
